<!DOCTYPE html>
<html lang="ru">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
    	<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link href="../css/minimal-table.css" rel="stylesheet" type="text/css">
		<title>pro apache</title>
	</head>
	<body>
		<header>
			<ul>
				<li><a href="../index.html">Главная</a></li>
				<li><a href="http-protocol.html">HTTP протокол</a></li>
			</ul>
		</header>
	<h1>Apache</h1>
	<img src="../images/apache.jpg">
	<h2>Введение</h2>
	
	<p>
		В разных дистрах по дефолту у Apache разыные настройки.
	</p>
	<p>
	   У Apache модульная архитектура. Модули можно подключать в основном конфиге. Модули позволяют подключать много разных функций (варианты аутентификации,
	   повышенную безопастность, поддержку кода, перезапись URL и многое др).
	</p> 
	<p>
	   В основно Apache имеет подключаемую СИСТЕМУ ОБРАБОТКИ СОЕДИНЕНИЙ на основе многопроцессорных модулей (multi-processing modules - MPM), которая опреляет,
	   как HTTP-соединения обрабатываются на СЕТЕВОМ УРОВНЕ ВВОДА-ВЫВОДА. Событийная (event)MPM это совремнная технология, которая рекомендуется вместо устаревших
	   worker и prefork.
	</p>
	<p>
	   Для привязки к привелигированным портам (с номерами меньше 1024, такими как HTTP-порт 80 и HTTPS-порт 443), начальный процес httpd должен выполняться
       с правами root. Затем этот процесс запускает дополнительные рабочие модули под локальной учетной записью с более низкими привелегиями для обработки
	   фактических запросов.
	</p>
	<p>
	   Серверы httpd которые не должны прослушивать порты 80 или 443, могут выполняться полностюь без root!
	</p>
	<h2>Настройка</h2>
	<p>
	   Apache настраиватеся с помощь директив в текстовых файлах конфигураций, которые используют отличительный синтаксис Apache!
	</p>
	<p>
	   Системы инициализации (такие как systemd) могут управлять httpd-веб-сервером. Но, для отладки и настройки можно взаимодействовать с Apache независимо 
	   от systemd.<br>
	   Можно запускать веб-сервер Apache напрямую, или используя утилты apachectl. Запуск httpd-сервера напрямую из комадной строки подразумевает прямой контроль 
	   над демоном сервера, но для этого необходимо помнить и набирать все опции, а это не легко. Так же существует оболочка сценария вокруг демона httpd - apachectl.
       В каждом дистре оболчка apachectl настроена по своему, что бы она соответствовала соглашениям процесса init. apachectl может запускать, останавливат,
	   перезагружать и показывать состояние Apache.
	   <ul>
			<li><code># apachectl start</code>   --- запуск сервера с конфигом по дефолту. Команда сначала проверит конфиг а потом запустит демон.</li>
			<li><code># apachectl graceful</code>   --- ждет пока закроются все открытые соединения, а затем перезагружает сервер.</li>
			<li><code># apachectl -f /etc/httpd/conf/custom-confif.conf -k start</code>   --- запуск с выбранным конфигом.</li>
	   </ul>
	</p>
	<p>
	   Вся конфигурация может содержать в одном файле, но обычно используют директиву include, для разделения конфигурации на несколько файлов и каталогов. 
	   Так лучше упралять сервером и автоматизировать!
	</p>
	<table>
		<tr>
			<td></td>
			<th>CentoOS</th>
			<th>Debian</th>
		</tr>
		<tr>
			<th>Имя пакета</th>
			<td>httpd</td>
			<td>Apache2</td>
		</tr>
		<tr>
			<th>Корневой каталог</th>
			<td>/etc/httpd</td>
			<td>/etc/apache2</td>
		</tr>
		<tr>
			<th>Основной конфиг</th>
			<td>conf/httpd.conf</td>
			<td>apache2.conf</td>
		</tr>
		<tr>
			<th>Конфиг модулей</th>
			<td>conf.modules.d/</td>
			<td>mods-enable/</br>mods-available</td>
		</tr>
		<tr>
			<th>Журнал</th>
			<td>/var/log/httpd</td>
			<td>/var/log/apache2</td>
		</tr>
		<tr>
			<th>Пользователь</th>
			<td>apache</td>
			<td>www-date</td>
		</tr>
	</table>
	<p>
   	   Во время запуска, сервер обращается к основному конфигу, и включает любые допонительные файлы, которые указаны в директивах Include. По дефолту конфиг
	   содержит много коментов и служит в качестве короткого мана.<br> 
       Параметры конфига можно сгруппировать по трем категориям:
       <ul>
	   	<li><i>Глобалные</i> Путь к корневому каталогу конфига сервера; пользователь и группа для запуска; модули для активации; а так же сетевые интерфейсы 
			и порты для прослушивания.</li>
   		<li><i>VirtualHost</i> разделы! Определяют как будут обрабатываться запросы к текущему домену (обычно перенесены в каталоги, и включаются в основной 
			конфиг с помощью директивы Include).</li>
        <li>Инструкции для ответов на запросы которые не соответствуют определению <i>VirtualHost</i></li>
	   </ul>
	</p>
	<p>
	   Модули существуют независимо от ядра httpd и часто имеют свои собственые параметры конфигурации.
	</p>
	<h2>Настройка виртуального хоста</h2>
	Когда поступает HTTP-запрос, веб-сервер определяет, какой вирутальный
хост следует выбрать, обратившись к HTTP-заголовку Host и сетевому порту
	</body>
</html>



















